package com.blaze.framework.core.boot.web.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.blaze.framework.core.security.UserInfo;
import com.blaze.framework.core.security.UserLocalContextHelper;
import com.blaze.framework.core.util.domain.R;
import com.blaze.framework.starter.mybatis.plus.util.PageUtil;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.RestController;

/**
 * 基础控制器
 *
 * @author created by Zhou Zongbo on 2025/5/28.
 */
public abstract class BaseController {

    /**
     * 获取本次请求的用户信息
     *
     * @return UserInfo
     */
    public UserInfo getUser() {
        return UserLocalContextHelper.getUserInfo();
    }

    /**
     * 获取从请求上下文中获取分页信息，也可以在controller方法入参中Page<T> page进行分页自动注入
     * @param <T> T
     * @return T
     */
    public <T> Page<T> page() {
        return PageUtil.getPage();
    }

    /**
     * 成功响应
     *
     * @param data data
     * @param <T>  泛型
     * @return R
     */
    public <T> R<T> ok(T data) {
        return R.ok(data);
    }

    public <T> R<T> ok() {
        return R.ok();
    }

    /**
     * 失败响应
     *
     * @param msg 失败消息
     * @param <T> 泛型
     * @return R
     */
    public <T> R<T> fail(String msg, T data) {
        return R.fail(msg, data);
    }

    public <T> R<T> fail(String msg) {
        return R.fail(msg);
    }
}
